<?php

/*
* This file is part of the symfony package.
* (c) Fabien Potencier <fabien.potencier@symfony-project.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/

/**
 * sfWidgetFormTextareaTinyMCE represents a Tiny MCE widget.
 *
 * You must include the Tiny MCE JavaScript file by yourself.
 *
 * @package    symfony
 * @subpackage widget
 * @author     Fabien Potencier <fabien.potencier@symfony-project.com>
 * @version    SVN: $Id: sfWidgetFormTextareaTinyMCE.class.php 17192 2009-04-10 07:58:29Z fabien $
 */
class sfWidgetFormTextareaTinyMCEWithAssets extends sfWidgetFormTextarea
{
    /**
   * Constructor.
   *
   * Available options:
   *
   *  * theme:  The Tiny MCE theme
   *  * width:  Width
   *  * height: Height
   *  * config: The javascript configuration
   *
   * @param array $options     An array of options
   * @param array $attributes  An array of default HTML attributes
   *
   * @see sfWidgetForm
   */
      public function getJavaScripts()
      {
          $path = '/'.sfConfig::get('sf_rich_text_js_dir','js/tiny_mce').'/tiny_mce.js';
           
        return array( str_replace('//','/',$path)       ); 
      }
    protected function configure($options = array(), $attributes = array())
    {
        $this->addOption('theme', 'advanced');
        $this->addOption('width');
        $this->addOption('height');
        $this->addOption('config', '');
    }

    /**
   * @param  string $name        The element name
   * @param  string $value       The value selected in this widget
   * @param  array  $attributes  An array of HTML attributes to be merged with the default HTML attributes
   * @param  array  $errors      An array of errors for the field
   *
   * @return string An HTML tag string
   *
   * @see sfWidgetForm
   */
    public function render($name, $value = null, $attributes = array(), $errors = array())
    {
        sfContext::getInstance()->getConfiguration()->loadHelpers('Asset','Url');

        $textarea = parent::render($name, $value, $attributes, $errors);

        $js = sprintf(<<<EOF
<script type="text/javascript">
  tinyMCE.init({
    mode:                              "exact",
    relative_urls : false,
    elements:                          "%s",
    theme:                             "%s",
    %s
    %s
    theme_advanced_toolbar_location:   "top",
    theme_advanced_toolbar_align:      "left",
    theme_advanced_statusbar_location: "bottom",
    
    
        plugins : "paste",
        theme_advanced_buttons3_add : "pastetext,pasteword,selectall",
        paste_auto_cleanup_on_paste : true,
        paste_preprocess : function(pl, o) {
            //alert(o.content);
        },
        paste_postprocess : function(pl, o) {
            //alert(o.node.innerHTML);
        },

    
    
    theme_advanced_buttons2 : "fontselect,fontsizeselect,mybutton,code,image,bold,italic,underline,separator,strikethrough,justifyleft,justifycenter,justifyright,justifyfull,bullist,numlist,undo,redo,link,unlink",
    setup : function(ed) {
       ed.addButton('mybutton', {
            title : 'Add asset image',
            image : '%s',
            onclick : function() {
                // Add you own code to execute something on click
                window.open ("%s","mywindow","toolbar=0,scrollbars=1,location=0,statusbar=0,menubar=0,resizable=1,width=800,height=600");
            }
        });
    },
    theme_advanced_resizing:           true
    %s
  });
</script>
EOF
        ,
        $this->generateId($name),
        $this->getOption('theme'),
        $this->getOption('width')  ? sprintf('width:                             "%spx",', $this->getOption('width')) : '',
        $this->getOption('height') ? sprintf('height:                            "%spx",', $this->getOption('height')) : '',
        image_path('/sfAssetsLibraryPlugin/images/image_add.png'),
        url_for('sfAsset/list').'?popup=1',
        $this->getOption('config') ? ",\n".$this->getOption('config') : ''
        );

        return $textarea.$js;
}
}
